System.Collections.Generic.HashSet<T> クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

このクラスは HashSet<T> 、高パフォーマンスのセット操作を提供します。 セットは、重複する要素を含まないコレクションであり、その要素が特定の順序で存在しません。

HashSet<T> オブジェクトの容量は、オブジェクトが保持できる要素数です。 HashSet<T> オブジェクトに要素が追加されると、このオブジェクトの容量は自動的に増加します。

HashSet<T> クラスは数学の集合モデルに基づいており、Dictionary<TKey,TValue>Hashtable コレクションのキーにアクセスするのと同じような高パフォーマンスの set 操作を行えます。 簡単に言うと、クラスは HashSet<T> 値のないコレクションと Dictionary<TKey,TValue> 考えることができます。

HashSet<T> コレクションはソートされておらず、また重複要素を含めることができません。 もし順序や重複した要素があなたのアプリケーションにとってパフォーマンスより重要であれば、List<T> クラスを Sort メソッドと共に使用することを検討してみてください。

HashSet<T> は集合の加算 (和集合) や集合の減算など様々な数学の集合に関する操作を提供しています。 下記の表では HashSet<T> の操作とその数学的な意味を掲載しています。

HashSet 操作 数学に相当する
UnionWith 和集合またはセット加算
IntersectWith インターセクション
ExceptWith 減算を設定する
SymmetricExceptWith 対称の違い

リストされているセット操作に加えて、このクラスには、 HashSet<T> セットの等価性、セットの重複、およびセットが別のセットのサブセットかスーパーセットかを判断するためのメソッドも用意されています。

.NET Framework のみ: 非常に大きなHashSet<T>オブジェクトの場合、構成要素の属性<gcAllowVeryLargeObjects>を実行時環境に設定enabledすることで、64 ビット システムで最大容量を 20 億要素にtrue増やすことができます。

HashSet<T> クラスは、ISet<T> インターフェイスを実装します。

HashSet および LINQ セット操作

LINQ は、インターフェイスIQueryableDistinctExceptUnionIntersect実装するデータ ソースに対する 、および設定操作へのアクセスをIEnumerable提供します。 HashSet<T> は、より大きく堅牢なセット操作のコレクションを提供します。 たとえば、 HashSet<T> 次のような IsSubsetOf 比較を提供します IsSupersetOf

LINQ セット操作と HashSet<T> 操作の主な違いは、LINQ セット操作が常に新しい IEnumerable<T> コレクションを返すのに対し、同等の HashSet<T> メソッドは現在のコレクションを変更することです。

通常、新しいセットを作成する必要がある場合、またはアプリケーションが指定されたセット操作にのみアクセスする必要がある場合は、任意 IEnumerable<T> のコレクションまたは配列で LINQ セット操作を使用するだけで十分です。 ただし、アプリケーションが追加のセット操作にアクセスする必要がある場合、または新しいコレクションを作成するのが望ましくない場合や必要な場合は、クラスを使用します HashSet<T>

次の表に、操作と同等の HashSet<T> LINQ セット操作を示します。

HashSet 操作 LINQ に相当する
UnionWith Union
IntersectWith Intersect
ExceptWith Except
指定されていません。 Distinct
SymmetricExceptWith 指定されていません。
Overlaps 指定されていません。
IsSubsetOf 指定されていません。
IsProperSubsetOf 指定されていません。
IsSupersetOf 指定されていません。
IsProperSupersetOf 指定されていません。
SetEquals 指定されていません。